Previous: Kinds of Declarations, Up: Declarations [Contents][Index]
Calc has a set of functions for accessing the current declarations in a convenient manner. These functions return 1 if the argument can be shown to have the specified property, or 0 if the argument can be shown not to have that property; otherwise they are left unevaluated. These functions are suitable for use with rewrite rules (see Conditional Rewrite Rules) or programming constructs (see Conditionals in Macros). They can be entered only using algebraic notation. See Logical Operations, for functions that perform other tests not related to declarations.
For example, ‘dint(17)’ returns 1
because 17 is an integer, as do
‘dint(n)’ and ‘dint(2 n -
3)’ if n has been declared
int, but ‘dint(2.5)’ and
‘dint(n + 0.5)’ return 0. Calc consults
knowledge of its own built-in functions as well as your own
declarations: ‘dint(floor(x))’ returns
1.
The dint function checks if its argument is an
integer. The dnatnum function checks if its argument
is a natural number, i.e., a nonnegative integer. The
dnumint function checks if its argument is
numerically an integer, i.e., either an integer or an
integer-valued float. Note that these and the other data type
functions also accept vectors or matrices composed of suitable
elements, and that real infinities ‘inf’
and ‘-inf’ are considered to be integers
for the purposes of these functions.
The drat function checks if its argument is
rational, i.e., an integer or fraction. Infinities count as
rational, but intervals and error forms do not.
The dreal function checks if its argument is
real. This includes integers, fractions, floats, real error
forms, and intervals.
The dimag function checks if its argument is
imaginary, i.e., is mathematically equal to a real number times
‘i’.
The dpos function checks for positive (but
nonzero) reals. The dneg function checks for
negative reals. The dnonneg function checks for
nonnegative reals, i.e., reals greater than or equal to zero.
Note that Calc’s algebraic simplifications, which are
effectively applied to all conditions in rewrite rules, can
simplify an expression like ‘x > 0’
to 1 or 0 using dpos. So the actual functions
dpos, dneg, and dnonneg
are rarely necessary.
The dnonzero function checks that its argument is
nonzero. This includes all nonzero real or complex numbers, all
intervals that do not include zero, all nonzero modulo forms,
vectors all of whose elements are nonzero, and variables or
formulas whose values can be deduced to be nonzero. It does not
include error forms, since they represent values which could be
anything including zero. (This is also the set of objects
considered “true” in conditional
contexts.)
The deven function returns 1 if its argument is
known to be an even integer (or integer-valued float); it returns
0 if its argument is known not to be even (because it is known to
be odd or a non-integer). Calc’s algebraic simplifications
use this to simplify a test of the form ‘x % 2 =
0’. There is also an analogous dodd
function.
The drange function returns a set (an interval or
a vector of intervals and/or numbers; see Set Operations) that
describes the set of possible values of its argument. If the
argument is a variable or a function with a declaration, the
range is copied from the declaration. Otherwise, the possible
signs of the expression are determined using a method similar to
dpos, etc., and a suitable set like ‘[0
.. inf]’ is returned. If the expression is not
provably real, the drange function remains
unevaluated.
The dscalar function returns 1 if its argument is
provably scalar, or 0 if its argument is provably non-scalar. It
is left unevaluated if this cannot be determined. (If Matrix mode
or Scalar mode is in effect, this function returns 1 or 0,
respectively, if it has no other information.) When Calc
interprets a condition (say, in a rewrite rule) it considers an
unevaluated formula to be “false.” Thus,
‘dscalar(a)’ is “true” only
if a is provably scalar, and
‘!dscalar(a)’ is “true” only
if a is provably non-scalar; both are
“false” if there is insufficient information to
tell.
Previous: Kinds of Declarations, Up: Declarations [Contents][Index]